package com.itheima.servlet;

import com.itheima.pojo.Setmeal;
import com.itheima.service.CheckSetmealService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class FreeMarker {

	@Autowired
	private CheckSetmealService checkSetmealService;

	public void crateSetmealListFreeMarker() throws IOException {
		// 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是FreeMarker对应的版本号。
		Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);


		// 第二步：设置模板文件所在的路径。
		configuration.setDirectoryForTemplateLoading(new File("D:\\javaProject\\health-parent\\bxg-health-parent\\bxg-health-backend\\src\\main\\resources\\templates"));

		// 第三步：设置模板文件使用的字符集。一般就是utf-8.
		configuration.setDefaultEncoding("UTF-8");

		// 第四步：加载一个模板，创建一个模板对象。
		Template template = configuration.getTemplate("mobile_setmeal.ftl");

		// 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
		Map<String, Object> dataModel = new HashMap<String, Object>();
		List<Setmeal> setmealList = checkSetmealService.getSetmeal();
		//向数据集中添加数据
		dataModel.put("setmealList", setmealList);

		// 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
		Writer writer = new FileWriter(new File("D:\\javaProject\\health-parent\\bxg-health-parent\\bxg-health-mobile\\src\\main\\resources\\mobile\\pages\\setmeal.html"));

		// 第七步：调用模板对象的process方法输出文件。
		try {
			template.process(dataModel, writer);
		} catch (TemplateException e) {
			throw new RuntimeException(e);
		}

		// 第八步：关闭流。
		writer.close();
	}

	public void crateSetmealDetailFreeMarker(Integer setmealId) throws IOException {
		// 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是FreeMarker对应的版本号。
		Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);

		// 第二步：设置模板文件所在的路径。
		configuration.setDirectoryForTemplateLoading(new File("D:\\javaProject\\health-parent\\bxg-health-parent\\bxg-health-backend\\src\\main\\resources\\templates"));

		// 第三步：设置模板文件使用的字符集。一般就是utf-8.
		configuration.setDefaultEncoding("UTF-8");

		// 第四步：加载一个模板，创建一个模板对象。
		Template template = configuration.getTemplate("mobile_setmeal_detail.ftl");

		// 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
		Map dataModel = new HashMap<String, Object>();
		Setmeal setmeal = checkSetmealService.findDetailById(setmealId);
		//向数据集中添加数据
		dataModel.put("setmeal", setmeal);

		// 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
		Writer writer = new FileWriter(new File("D:\\javaProject\\health-parent\\bxg-health-parent\\bxg-health-mobile\\src\\main\\resources\\mobile\\pages\\setmeal_detail_" + setmealId + ".html"));

		// 第七步：调用模板对象的process方法输出文件。
		try {
			template.process(dataModel, writer);
		} catch (TemplateException e) {
			throw new RuntimeException(e);
		}

		// 第八步：关闭流。
		writer.close();
	}
}
